package Net::SMB::NameResolver;

use JIP::ToolSet;
use Exporter::Lite;
use Net::NBName;
use Carp qw( croak );
use English qw( -no_match_vars );

our @EXPORT_OK = qw( getNBN );

sub getNBN {
    my %params = @ARG;

    croak('required parameter not defined') unless defined $params{'ip_address'};

    croak( "IP address '". $params{'ip_address'} ."' must be provided in 000.000.000.000 format" )
        if $params{'ip_address'} !~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;

    my $nodeStatus = Net::NBName->new->node_status( $params{'ip_address'} );

    if ( $nodeStatus ) {
        for my $eachRecord ( $nodeStatus->names ) {
            if ( $eachRecord->suffix == 0 and $eachRecord->G eq 'UNIQUE' ) {
                return $eachRecord->name
                    if $eachRecord->name !~ /^IS~/ and $eachRecord->name !~ /[^[:ascii:]]/;
            }
        }
    }

    return;
}

1;

__END__

=head1 NAME

Net::SMB::NameResolver

=head1 DESCRIPTION

Net::SMB::NameResolver - предназначен для определения NETBIOS Name по IP-адресу

=head1 SYNOPSIS

use Net::SMB::NameResolver qw( getNBN );

my $NETBIOSName = getNBN( ip_address => '10.0.14.140' ) // '-';

=head1 METHODS

getNBN() - получает именованные параметры. требуется обязательное импортировани

--ip_address - обязательный параметр

возвращает скаляр содержащий имя хоста
возвращает undef если у хоста отсутствует имя или оно содержит non-ascii символы

=cut
